const express = require('express')
const xlsx = require('xlsx')
const fs = require('fs')
const { v4: uuidv4 } = require('uuid')
const { sendResponse } = require('../utils/sendResponse.js')
const { getFilePath, createExcelFileIfNotExists } = require('../utils/constants.js') // 引入常量

const router = express.Router()
// 使用绝对路径
const filePath = getFilePath('users')

createExcelFileIfNotExists(filePath, 'users')

// 注册路由
router.post('/register', (req, res) => {
  const { account, phone, password } = req.body

  // 检查是否提供了账号、手机号和密码
  if (!account || !phone || !password) {
    return sendResponse(res, 400, {}, '请提供账号、手机号和密码。')
  }

  // 校验账号规则
  const accountRegex = /^[^\u4e00-\u9fa5\s!"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]/
  if (!accountRegex.test(account)) {
    return sendResponse(res, 400, {}, '账号开头不能为汉字或特殊字符。')
  }

  // 校验密码长度
  if (password.length < 4 || password.length > 8) {
    return sendResponse(res, 400, {}, '密码长度必须在 4 到 8 位之间。')
  }

  const workbook = xlsx.readFile(filePath)
  const worksheet = workbook.Sheets['users']
  const usersData = xlsx.utils.sheet_to_json(worksheet)

  // 检查账号或手机号是否已存在
  const userExists = usersData.some((user) => user.Account === account || user.Phone === phone)

  if (userExists) {
    return sendResponse(res, 400, {}, '账号或手机号已存在。')
  }

  // 生成新用户 ID
  const userId = uuidv4()
  // 初始化新用户数据
  const newUser = {
    ID: userId,
    Account: account,
    Phone: phone,
    Password: password,
    Avatar: '',
    Nickname: '',
    Gender: '',
    Birthdate: '',
    Address: '',
    TotalAssets: 0, // 新增字段: 总资产
    TotalLikes: 0, // 新增字段: 总共获取的赞
    Followers: 0, // 新增字段: 粉丝数
    TotalWordsWritten: 0 // 新增字段: 总共写的字数
  }

  // 将新用户添加到用户数据中
  usersData.push(newUser)

  // 将更新后的用户数据写入 Excel 文件
  const newSheet = xlsx.utils.json_to_sheet(usersData)
  workbook.Sheets['users'] = newSheet
  xlsx.writeFile(workbook, filePath)

  // 返回注册成功的响应
  return sendResponse(res, 200, { userId, account, phone, nickname: newUser.Nickname }, '注册成功！')
})

module.exports = router
